﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Gestores;
using Negocio.Entidades;
using System.Drawing;


namespace autogestionAVEIT
{
    public partial class ABMCliente : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    cargarCombos();
                    mostrarListaDeClientes();
                }
                catch (Exception)
                {
                    panel_botones.Visible = true;
                    lblMensajeHeader.Text = "Error al cargar la página. Intentelo nuevamente. ";
                }
                
            }
        }

        protected void ddlPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlProvincia.DataTextField = "nombre";
            ddlProvincia.DataValueField = "id_provincia";
            ddlProvincia.DataSource = GestorDomicilio.ObtenerProvincias(int.Parse(ddlPais.SelectedValue));
            ddlProvincia.DataBind();
            ddlProvincia.Items.Insert(0, new ListItem("Seleccione una provincia", "0"));
            ddlProvincia.SelectedIndex = 0;  // opcion insertada en la primera posicion
            ddlLocalidad.Items.Clear();
            ddlProvincia.Focus();
        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.DataTextField = "nombre";
            ddlLocalidad.DataValueField = "id_ciudad";
            ddlLocalidad.DataSource = GestorDomicilio.ObtenerLocalidades(int.Parse(ddlProvincia.SelectedValue));
            ddlLocalidad.DataBind();
            ddlLocalidad.Items.Insert(0, new ListItem("Seleccione una localidad", "0"));
            ddlLocalidad.SelectedIndex = 0;  // opcion insertada en la primera posicion
            ddlLocalidad.Focus();
        }

        private void cargarCampos(int idCliente)
        {
            try
            {
                Cliente cli = GestorCliente.obtenerCliente(idCliente);

                limpiarCampos();
                lblIdCliente.Visible = true;
                txtIdCliente.Visible = true;
                lblIdDomicilio.Visible = true;
                txtIdDomicilio.Visible = true;

                txtIdCliente.Text = cli.IdCliente.ToString();
                txtNombre.Text = cli.Nombre;
                txtApellido.Text = cli.Apellido;
                ddlTipoDNI.SelectedIndex = cli.TipoDocumento;
                txtDocumento.Text = cli.NumeroDocumento.ToString();
                if (cli.TipoTelefono.HasValue)
                    ddlTipoTelefono.SelectedIndex = int.Parse(cli.TipoTelefono.ToString());
                if (cli.NumeroCaracteristicaTelefono.HasValue)
                    txtCaracteristicaTelefono.Text = cli.NumeroCaracteristicaTelefono.ToString();
                if (cli.NumeroTelefono.HasValue)
                    txtNumeroTelefono.Text = cli.NumeroTelefono.ToString();
                if (cli.Email != null)
                    txtEmail.Text = cli.Email.ToString();
                if (cli.Sexo.HasValue)
                    rblSexo.SelectedValue = cli.Sexo.ToString();
                chkActivo.Checked = cli.activo;
                if (cli.domicilio != null)
                {
                    txtIdDomicilio.Text = cli.domicilio.id_domicilio.ToString();
                    txtCalle.Text = cli.domicilio.calle;
                    txtNumero.Text = cli.domicilio.numero.ToString();
                    if (cli.domicilio.piso.HasValue)
                        txtPiso.Text = cli.domicilio.piso.ToString();
                    if (cli.domicilio.departamento != null)
                        txtDepartamento.Text = cli.domicilio.departamento.ToString();
                    if (cli.domicilio.barrio != null)
                        txtBarrio.Text = cli.domicilio.barrio.ToString();
                    if (cli.domicilio.cod_postal.HasValue)
                        txtCodigoPostal.Text = cli.domicilio.cod_postal.ToString();
                    cargarCombosDomicilio(cli.domicilio.id_pais, cli.domicilio.id_provincia, cli.domicilio.id_localidad);
                    
                }     
            }
            catch (Exception e)
            {
                throw new ApplicationException(e.Message);
            }
           
        }

        private void limpiarCampos()
        {
            lblIdCliente.Visible = false;
            txtIdCliente.Visible = false;
            lblIdDomicilio.Visible = false;
            txtIdDomicilio.Visible = false;
            txtIdCliente.Text = "";
            txtIdDomicilio.Text = "";
            txtNombre.Text = "";
            txtApellido.Text = "";
            ddlTipoDNI.SelectedIndex = 0;
            txtDocumento.Text = "";
            ddlTipoTelefono.SelectedIndex = 0;
            txtCaracteristicaTelefono.Text = "";
            txtNumeroTelefono.Text = "";
            txtEmail.Text = "";
            rblSexo.SelectedIndex = -1;
            txtCalle.Text = "";
            txtNumero.Text = "";
            txtPiso.Text = "";
            txtDepartamento.Text = "";
            txtBarrio.Text = "";
            txtCodigoPostal.Text = "";
            ddlPais.SelectedIndex = 0;
            ddlProvincia.Items.Clear();
            ddlLocalidad.Items.Clear();
            lblMensajeFooter.Text = "";
            lblMensajeHeader.CssClass = "alert-danger";
            lblMensajeHeader.Text = "";
            GVClientes.SelectedIndex = -1;
            chkActivo.Checked = true;
        }

        private void mostrarListaDeClientes()
        {
            //obtiene todos los clientes
            try
            {                
                GVClientes.DataSource = GestorCliente.ObtenerTodos();
                GVClientes.DataBind();
            }
            catch (Exception ex)
            {

                throw new ApplicationException(ex.Message);
            }
        }

        private void cargarCombos()
        {
            try
            {
                ddlPais.DataTextField = "nombre";
                ddlPais.DataValueField = "id_pais";
                ddlPais.DataSource = GestorDomicilio.ObtenerPaises();
                ddlPais.DataBind();
                ddlPais.Items.Insert(0, new ListItem("Seleccione un pais", "0"));
                ddlPais.SelectedIndex = 0;  // opcion insertada en la primera posicion

                ddlTipoDNI.DataTextField = "descripcion";
                ddlTipoDNI.DataValueField = "id_tipoDni";
                ddlTipoDNI.DataSource = GestorTipoDocumento.ObtenerTipoDoc();
                ddlTipoDNI.DataBind();
                ddlTipoDNI.Items.Insert(0, new ListItem("Seleccione un tipo de documento", "0"));
                ddlTipoDNI.SelectedIndex = 0;  // opcion insertada en la primera posicion

                ddlTipoTelefono.DataTextField = "descripcion";
                ddlTipoTelefono.DataValueField = "id_tipoTelefono";
                ddlTipoTelefono.DataSource = GestorTipoTelefono.ObtenerTipoTelefono();
                ddlTipoTelefono.DataBind();
                ddlTipoTelefono.Items.Insert(0, new ListItem("Seleccione un tipo de telefono", "0"));
                ddlTipoTelefono.SelectedIndex = 0;  // opcion insertada en la primera posicion

            }
            catch (Exception e2)
            {

                throw new ApplicationException(e2.Message);
            }   
        }

        protected void cargarCombosDomicilio(int pais, int provincia, int ciudad)
        {
            ddlPais.DataTextField = "nombre";
            ddlPais.DataValueField = "id_pais";
            ddlPais.DataSource = GestorDomicilio.ObtenerPaises();
            ddlPais.DataBind();
            ddlPais.SelectedValue = pais.ToString();

            ddlProvincia.DataTextField = "nombre";
            ddlProvincia.DataValueField = "id_provincia";
            ddlProvincia.DataSource = GestorDomicilio.ObtenerProvincias(int.Parse(ddlPais.SelectedValue));
            ddlProvincia.DataBind();
            ddlProvincia.SelectedValue = provincia.ToString();

            ddlLocalidad.DataTextField = "nombre";
            ddlLocalidad.DataValueField = "id_ciudad";
            ddlLocalidad.DataSource = GestorDomicilio.ObtenerLocalidades(int.Parse(ddlProvincia.SelectedValue));
            ddlLocalidad.DataBind();
            ddlLocalidad.SelectedValue = ciudad.ToString();
        }  

        protected void btn_grabar_Click(object sender, EventArgs e)
        {
            try
            {
                Cliente cli = grabarCliente();
                GestorCliente.GrabarCliente(cli);
                limpiarCampos();
                lblMensajeHeader.Text = "Se grabó el cliente correctamente. ";
                lblMensajeHeader.CssClass = "alert-success";
                panel_cuerpo.Visible = false;
                panel_botones.Visible = true;
                panel_footer.Visible = false;
                panel_grilla.Visible = true;
                mostrarListaDeClientes();
            }
            catch (Exception ex)
            {

                lblMensajeFooter.Text = "No se pudo Grabar el cliente. " + ex.Message;
            }

        }

        private Cliente grabarCliente()
        {
            Cliente c = new Cliente();
            if (txtIdCliente.Text != "")
                c.IdCliente = int.Parse(txtIdCliente.Text);
            c.Nombre = txtNombre.Text;
            c.Apellido = txtApellido.Text;

            //nuevo Email y nuevo Telefono
            c.Email = txtEmail.Text;
            if (txtCaracteristicaTelefono.Text != "")
                c.NumeroCaracteristicaTelefono = long.Parse(txtCaracteristicaTelefono.Text);
            if (txtNumeroTelefono.Text != "")
                c.NumeroTelefono = long.Parse(txtNumeroTelefono.Text);
            if (int.Parse(ddlTipoTelefono.SelectedValue.ToString()) > 0)
                c.TipoTelefono = int.Parse(ddlTipoTelefono.SelectedValue);
            c.TipoDocumento = int.Parse(ddlTipoDNI.SelectedValue);
            c.NumeroDocumento = long.Parse(txtDocumento.Text);
            c.Sexo = char.Parse(rblSexo.SelectedValue);
            c.activo = chkActivo.Checked;
            c.FechaAlta = DateTime.Now.Date.ToShortDateString();
            c.domicilio = grabarDomicilio();
            return c;
        }

        private Domicilio grabarDomicilio()
        {
            Domicilio dom = new Domicilio();
            if(int.Parse(ddlLocalidad.SelectedValue.ToString())>0)
                dom.id_localidad = int.Parse(ddlLocalidad.SelectedValue);
            dom.calle = txtCalle.Text;
            dom.numero = int.Parse(txtNumero.Text);
            if(txtPiso.Text!="")
                dom.piso = int.Parse(txtPiso.Text);
            if (txtDepartamento.Text != "")
                dom.departamento = txtDepartamento.Text;
            if (txtBarrio.Text != "")
                dom.barrio = txtBarrio.Text;
            if (txtCodigoPostal.Text != "")
                dom.cod_postal = int.Parse(txtCodigoPostal.Text);
            return dom;
        }

        protected void GVClientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            var id = GVClientes.SelectedValue;
            lblMensajeHeader.Text = "";
        }

        protected void GVClientes_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GVClientes.PageIndex = e.NewPageIndex;
            mostrarListaDeClientes();
            GVClientes.SelectedIndex = -1;
            limpiarCampos();
        }

        protected void btn_nuevo_Click(object sender, EventArgs e)
        {
            panel_botones.Visible = false;
            panel_cuerpo.Visible = true;
            panel_grilla.Visible = false;
            panel_footer.Visible = true;
            limpiarCampos();

        }

        protected void btn_modificar_Click(object sender, EventArgs e)
        {
            if (GVClientes.SelectedRow != null)
            {
                try
                {
                    cargarCampos(int.Parse(GVClientes.SelectedValue.ToString()));
                    panel_botones.Visible = false;
                    panel_cuerpo.Visible = true;
                    panel_footer.Visible = true;
                    panel_grilla.Visible = false;
                    lblIdCliente.Visible = true;
                    txtIdCliente.Visible = true;
                }
                catch (Exception ex)
                {
                    
                    lblMensajeHeader.Text=ex.Message;
                } 
            }
            else
            {
                panel_botones.Visible = true;
                lblMensajeHeader.CssClass = "alert-danger";
                lblMensajeHeader.Text = "Debe seleccionar un Cliente";
            }
        }

        protected void btn_eliminar_Click(object sender, EventArgs e)
        {
            if (GVClientes.SelectedRow != null)
            {
                try
                {
                    GestorCliente.EliminarCliente(int.Parse(GVClientes.SelectedValue.ToString()));
                    limpiarCampos();
                    lblMensajeHeader.Text = "Se eliminó el cliente correctamente. ";
                    panel_cuerpo.Visible = false;
                    panel_botones.Visible = true;
                    panel_footer.Visible = false;
                    panel_grilla.Visible = true;
                    mostrarListaDeClientes();
                }
                catch (Exception ex)
                {
                    lblMensajeHeader.CssClass = "alert-danger";
                    lblMensajeHeader.Text = "No se pudo eliminar el cliente. " + ex.Message;
                }

            }
            else
            {
                panel_botones.Visible = true;
                lblMensajeHeader.Text = "Debe seleccionar un Cliente";
                lblMensajeHeader.CssClass = "alert-danger";
            }
        }

        protected void btn_cancelar_Click(object sender, EventArgs e)
        {
            panel_botones.Visible = true;
            panel_cuerpo.Visible = false;
            panel_footer.Visible = false;
            panel_grilla.Visible = true;
            limpiarCampos();
        }

    }
}